Итак, у меня есть этот код:
$sURLRegExp = '/http\:\/\/([a-z0-9\-\.]+\.[a-z]{2,3}(\/\S*)?)/i';
$iURLMatches = preg_match($sURLRegExp, $sMessage, $aURLMatches);
if ($iURLMatches > 0) {
$sURL = $aURLMatches[1];
$sURL = str_replace('www.', '', $sURL);
$sMessage = preg_replace($sURLRegExp, '<a href="http://$1" target="_blank">' .
$sURL . '</a>', $sMessage);
}
Он отлично работает для преобразования всех входящих сообщений, так что введенные простые URL-адреса превратятся в гиперссылки HTML, которые даже удаляют "http://" и" www."для краткости.
Дело в том, что администраторы сайта, на котором это работает, могут войти в HTML. Если они это сделают, он превращается в ужасный беспорядок. Что-то вроде site.com"> text .
Я попытался изменить регулярное выражение, чтобы убедиться, что после данного URL-адреса нет кавычек (что, скорее всего, означает, что он является частьютег привязки гиперссылки) примерно так:
$sURLRegExp = '/http\:\/\/([a-z0-9\-\.]+\.[a-z]{2,3}(\/\S*)?([^"])/i';
... но, похоже, это не работает.Я знаю об упреждающих утверждениях, но не знаю, как их вообще использовать.Будет ли это лучше всего использовать в этом случае?Как я могу обнаружить присутствие тега привязки вокруг этого URL?
Примечание. Я знаю, что могу просто использовать strpos (...)! == false для всегосообщение, но это не учитывает смешения простых URL и тегов привязки в одном сообщении.